//
//  $Id$
//  VCS_WS_Client
//
//  Created by hu_danyuan on 18-11-09.
//   (c) Copyright 2018, hu_danyuan All Rights Reserved
//
//	描    述:  VCS通讯接口
//

#import <Foundation/Foundation.h>
#import "VCS_WS_BaseClient.h"
#import "VCS_WS_ClientDelegate.h"
#import "VCS_WS_ServerVersion.h"
#import "VCS_WS_DeviceStatistics.h"
#import "VCS_WS_Districts.h"
#import "VCS_WS_Device.h"
#import "VCS_WS_Camera.h"
#import "VCS_WS_CameraChannel.h"
#import "VCS_WS_Record.h"
#import "VCS_WS_RealPlayResult.h"

@interface VCS_WS_Client : VCS_WS_BaseClient

@property (nonatomic, weak, nullable) id<VCS_WS_ClientDelegate> delegate;

/** 查询服务器版本信息 */
- (void)queryVersion:(void (^ _Nullable)(VCS_WS_ServerVersion * _Nullable result, NSError * _Nullable error))completion;

/** 查询网关、通道等统计信息 */
- (void)queryStatistics:(void (^ _Nullable)(VCS_WS_DeviceStatisticsAll * _Nullable result, NSError * _Nullable error))completion;

/** 查询所有的区域树 */
- (void)queryDistricts:(void (^ _Nullable)(NSArray<VCS_WS_Districts *> * _Nullable result, NSError * _Nullable error))completion;

/** 
 * 查询指定区域下的子区域
 * @param path          指定区域路径，每个区域之间用.分隔开。为空则表示查询全部
 * @param completion    请求结果回调，区域对象
 * @return
 */
- (void)queryDistrictWithPath:(NSString * _Nullable)path completion:(void (^ _Nullable)(NSArray<VCS_WS_Districts *> * _Nullable result, NSError * _Nullable error))completion;

/** 
 * 查询指定区域下的网关设备列表
 * @param path          指定区域路径，每个区域之间用.分隔开。为空则表示查询全部
 * @param type          all表示所有设备, unknown表示区域无效的设备, online表示在线设备, offline表示离线设备
 * @param offset        定返回结果从第几个设备开始
 * @param count         指定返回结果设备数量
 * @param completion    请求结果回调，设备列表
 * @return
 */
- (void)queryDevicesInPath:(NSString * _Nullable)path type:(NSString * _Nonnull)type offset:(NSInteger)offset count:(NSInteger)count completion:(void (^ _Nullable)(NSArray<VCS_WS_Device *> * _Nullable result, NSError * _Nullable error))completion;

/**
 * 查询网关设备详情
 * @param deviceUuid    指定设备id
 * @param completion    请求结果回调，设备详情
 * @return
 */
- (void)queryDeviceDetail:(NSString * _Nonnull)deviceUuid completion:(void (^ _Nullable)(VCS_WS_Device * _Nullable result, NSError * _Nullable error))completion;

/**
 * 查询指定网关下的监控设备列表
 * @param deviceUuid    指定设备id
 * @param completion    请求结果回调，监控设备列表
 * @return
 */
- (void)queryCameras:(NSString * _Nonnull)deviceUuid completion:(void (^ _Nullable)(NSArray<VCS_WS_Camera *> * _Nullable result, NSError * _Nullable error))completion;

/**
 * 查询指定监控设备下的监控通道列表
 * @param deviceUuid    指定设备id
 * @param cameraUuid    指定监控设备id
 * @param cameraUuid    指定监控设备id
 * @param completion    请求结果回调，监控通道列表
 * @return
 */
- (void)queryCameraChannels:(NSString * _Nonnull)deviceUuid cameraUuid:(NSString * _Nonnull)cameraUuid completion:(void (^ _Nullable)(NSArray<VCS_WS_CameraChannel *> * _Nullable result, NSError * _Nullable error))completion;

/**
 * 查询录像列表
 * @param findCond      查找条件
 * @param completion    请求结果回调，监控通道列表
 * @return
 */
- (void)queryRecords:(VCS_WS_FindCond * _Nonnull)findCond completion:(void (^ _Nullable)(NSArray<VCS_WS_Record *> * _Nullable result, NSError * _Nullable error))completion;

@end










